agora inbox for pgsql-hackers@postgresql.org  
help / color / mirror / Atom feed
[PATCH v1 1/1] remove pg_spin_delay()
249+ messages / 2 participants
[nested] [flat]

* [PATCH v1 1/1] remove pg_spin_delay()
@ 2026-05-05 17:37 Nathan Bossart <nathan@postgresql.org>
  0 siblings, 0 replies; 249+ messages in thread

From: Nathan Bossart @ 2026-05-05 17:37 UTC (permalink / raw)

---
 src/include/port/atomics.h          |  5 ---
 src/include/port/atomics/arch-x86.h | 54 -----------------------------
 src/include/port/atomics/generic.h  |  6 ----
 3 files changed, 65 deletions(-)

diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h
index d8b1d20fe60..c50d95d29e2 100644
--- a/src/include/port/atomics.h
+++ b/src/include/port/atomics.h
@@ -154,11 +154,6 @@
 #define pg_read_barrier()	pg_read_barrier_impl()
 #define pg_write_barrier()	pg_write_barrier_impl()
 
-/*
- * Spinloop delay - Allow CPU to relax in busy loops
- */
-#define pg_spin_delay() pg_spin_delay_impl()
-
 /*
  * pg_atomic_init_flag - initialize atomic flag.
  *
diff --git a/src/include/port/atomics/arch-x86.h b/src/include/port/atomics/arch-x86.h
index bd6f4f56ca2..b317cf7a188 100644
--- a/src/include/port/atomics/arch-x86.h
+++ b/src/include/port/atomics/arch-x86.h
@@ -76,60 +76,6 @@ typedef struct pg_atomic_uint64
 } pg_atomic_uint64;
 #endif	/* __x86_64__ */
 
-#endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */
-
-#if !defined(PG_HAVE_SPIN_DELAY)
-/*
- * This sequence is equivalent to the PAUSE instruction ("rep" is
- * ignored by old IA32 processors if the following instruction is
- * not a string operation); the IA-32 Architecture Software
- * Developer's Manual, Vol. 3, Section 7.7.2 describes why using
- * PAUSE in the inner loop of a spin lock is necessary for good
- * performance:
- *
- *     The PAUSE instruction improves the performance of IA-32
- *     processors supporting Hyper-Threading Technology when
- *     executing spin-wait loops and other routines where one
- *     thread is accessing a shared lock or semaphore in a tight
- *     polling loop. When executing a spin-wait loop, the
- *     processor can suffer a severe performance penalty when
- *     exiting the loop because it detects a possible memory order
- *     violation and flushes the core processor's pipeline. The
- *     PAUSE instruction provides a hint to the processor that the
- *     code sequence is a spin-wait loop. The processor uses this
- *     hint to avoid the memory order violation and prevent the
- *     pipeline flush. In addition, the PAUSE instruction
- *     de-pipelines the spin-wait loop to prevent it from
- *     consuming execution resources excessively.
- */
-#if defined(__GNUC__) || defined(__INTEL_COMPILER)
-#define PG_HAVE_SPIN_DELAY
-static inline void
-pg_spin_delay_impl(void)
-{
-	__asm__ __volatile__(" rep; nop			\n");
-}
-#elif defined(_MSC_VER) && defined(__x86_64__)
-#define PG_HAVE_SPIN_DELAY
-static __forceinline void
-pg_spin_delay_impl(void)
-{
-	_mm_pause();
-}
-#elif defined(_MSC_VER)
-#define PG_HAVE_SPIN_DELAY
-static __forceinline void
-pg_spin_delay_impl(void)
-{
-	/* See comment for gcc code. Same code, MASM syntax */
-	__asm rep nop;
-}
-#endif
-#endif /* !defined(PG_HAVE_SPIN_DELAY) */
-
-
-#if defined(__GNUC__) || defined(__INTEL_COMPILER)
-
 #define PG_HAVE_ATOMIC_TEST_SET_FLAG
 static inline bool
 pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr)
diff --git a/src/include/port/atomics/generic.h b/src/include/port/atomics/generic.h
index fd64b6cbd86..daa772e9a6d 100644
--- a/src/include/port/atomics/generic.h
+++ b/src/include/port/atomics/generic.h
@@ -28,12 +28,6 @@
 #	define pg_write_barrier_impl pg_memory_barrier_impl
 #endif
 
-#ifndef PG_HAVE_SPIN_DELAY
-#define PG_HAVE_SPIN_DELAY
-#define pg_spin_delay_impl()	((void)0)
-#endif
-
-
 /* provide fallback */
 #if !defined(PG_HAVE_ATOMIC_FLAG_SUPPORT) && defined(PG_HAVE_ATOMIC_U32_SUPPORT)
 #define PG_HAVE_ATOMIC_FLAG_SUPPORT
-- 
2.50.1 (Apple Git-155)


--9wPlq30DMLxbhZ5y--





^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread

* [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster
@ 2026-06-09 14:18 Andres Freund <andres@anarazel.de>
  0 siblings, 0 replies; 249+ messages in thread

From: Andres Freund @ 2026-06-09 14:18 UTC (permalink / raw)

Previously, with a cold cache or a change in a central header, the
CompilerWarnings job would take ~35 minutes. The worst aspect of that was the
windows cross build, which would take about 8-10 minutes.

Migrate the compiler warnings tasks to meson, that generally makes the
cold-cache build a bit faster, and makes the windows cross build a *lot*
faster, due to being able to use precompiled headers.

With that the cold cache performance improves to about 12 minutes.

Discussion: https://postgr.es/m/a2ejn7lfqolutzz7kozalbhy3bixdrujb4buc3pgbtlk4am2ba@wbv6v7riia33
---
 .github/workflows/pg-ci.yml           | 38 +++++++++++++--------------
 src/tools/ci/meson-cross-w64-ucrt.txt | 21 +++++++++++++++
 2 files changed, 40 insertions(+), 19 deletions(-)
 create mode 100644 src/tools/ci/meson-cross-w64-ucrt.txt

diff --git a/.github/workflows/pg-ci.yml b/.github/workflows/pg-ci.yml
index 742a8431782..81801800dac 100644
--- a/.github/workflows/pg-ci.yml
+++ b/.github/workflows/pg-ci.yml
@@ -1171,6 +1171,8 @@ jobs:
       # compilers / flag combinations.
       CCACHE_MAXSIZE: "1G"
       DEFAULT_BUILD: world-bin
+      CCACHE_SLOPPINESS: pch_defines,time_macros
+      CCACHE_DEPEND: 1
 
     steps:
       - *nix_sysinfo_step
@@ -1186,53 +1188,56 @@ jobs:
       - name: gcc warnings + (dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Ddtrace=enabled
           CC: ccache gcc
           CXX: ccache g++
           CLANG: ccache clang
         run: &compiler_warnings_cmd |
           echo "::group::configure"
-          ./configure \
-            ${{env.CONF}} \
-            CLANG="ccache clang"
+          rm -rf build-meson
+          meson setup -Dwerror=true $CONF build-meson
           echo "::endgroup::"
 
-          make -s -j${{env.BUILD_JOBS}} clean
-          make -s -j${{env.BUILD_JOBS}} ${{env.DEFAULT_BUILD}}
+          ninja -C build-meson --quiet -j${{env.BUILD_JOBS}} ${{env.MBUILD_TARGET}}
 
       # gcc, cassert on, dtrace off
       - name: gcc warnings + (cassert)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache gcc.cache --enable-cassert
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true
           CC: ccache gcc
           CXX: ccache g++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert off, dtrace off
       - name: clang warnings
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache
+          CONF: ${{env.MESON_COMMON_FEATURES}}
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       # clang, cassert on, dtrace on
       - name: clang warnings + (cassert + dtrace)
         if: ${{ !cancelled() }}
         env:
-          CONF: ${{env.LINUX_CONFIGURE_FEATURES}} --cache clang.cache --enable-cassert --enable-dtrace
+          CONF: ${{env.MESON_COMMON_FEATURES}} -Dcassert=true -Ddtrace=enabled
           CC: ccache clang
           CXX: ccache clang++
+          CLANG: ccache clang
         run: *compiler_warnings_cmd
 
       - name: mingw warnings (cross compilation)
         if: ${{ !cancelled() }}
         env:
-          CONF: --host=x86_64-w64-mingw32ucrt --enable-cassert --without-icu
-          CC: ccache x86_64-w64-mingw32ucrt-gcc
-          CXX: ccache x86_64-w64-mingw32ucrt-g++
+          CONF: >-
+            --cross-file src/tools/ci/meson-cross-w64-ucrt.txt
+            --buildtype debug
+            -Db_pch=true
+            -Dcassert=true
         run: *compiler_warnings_cmd
 
       ###
@@ -1241,12 +1246,8 @@ jobs:
       # XXX: Only do this if there have been changes in doc/ since last build
       - name: Build documentation
         if: ${{ !cancelled() }}
-        env:
-          CONF: --cache gcc.cache
-          CC: ccache gcc
-          CXX: ccache g++
-          DEFAULT_BUILD: -C doc
-        run: *compiler_warnings_cmd
+        run:
+          ninja -C build-meson docs
 
       ###
       # Verify headerscheck / cpluspluscheck succeed
@@ -1261,7 +1262,6 @@ jobs:
           echo "::group::configure"
           ./configure \
             ${{env.LINUX_CONFIGURE_FEATURES}} \
-            --cache gcc.cache \
             --quiet \
             CC="ccache gcc" CXX="ccache g++" CLANG="ccache clang"
           echo "::endgroup::"
diff --git a/src/tools/ci/meson-cross-w64-ucrt.txt b/src/tools/ci/meson-cross-w64-ucrt.txt
new file mode 100644
index 00000000000..b6144979416
--- /dev/null
+++ b/src/tools/ci/meson-cross-w64-ucrt.txt
@@ -0,0 +1,21 @@
+[constants]
+triple = 'x86_64-w64-mingw32ucrt'
+prefix = '/usr/bin' / triple + '-'
+
+[binaries]
+c = ['ccache', prefix + 'gcc']
+cpp = ['ccache', prefix + 'g++']
+ar = prefix + 'ar'
+strip = prefix + 'strip'
+pkg-config = prefix + 'pkg-config'
+windres = prefix + 'windres'
+
+[properties]
+# Directory that contains 'bin', 'lib', etc
+root = '/usr/x86_64-w64-mingw32ucrt'
+
+[host_machine]
+system = 'windows'
+cpu_family = 'x86_64'
+cpu = 'x86_64'
+endian = 'little'
-- 
2.54.0.450.g9ac3f193c0


--mr2uqtieh2e2xvha
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
	filename="v13a-0003-ci-Make-msys2-install-smaller.patch"



^ permalink  raw  reply  [nested|flat] 249+ messages in thread


end of thread, other threads:[~2026-06-09 14:18 UTC | newest]

Thread overview: 249+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2026-05-05 17:37 [PATCH v1 1/1] remove pg_spin_delay() Nathan Bossart <nathan@postgresql.org>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>
2026-06-09 14:18 [PATCH v13a 2/9] ci: Use meson for most of CompilerWarnings, it's a lot faster Andres Freund <andres@anarazel.de>

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox