From ee6e56c82ef738199312e3eb28df40806ddf41cf Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Sun, 19 Jul 2026 17:25:50 +0200 Subject: [PATCH] tools/cmake: backport bootstrap fix for GCC 16 CMake fails to bootstrap its host tool with GCC 16: cmake.o: undefined reference to `cmGlobalGhsMultiGenerator::cmGlobalGhsMultiGenerator(cmake*)' Source/cmake.cxx includes cmGlobalGhsMultiGenerator.h guarded only by __linux__, not by CMAKE_BOOTSTRAP. The NewFactory() call is compiled out during bootstrap, but GCC 16 devirtualization still emits the uncalled inline NewFactory() and the cmGlobalGeneratorSimpleFactory<> template, which reference symbols only defined in cmGlobalGhsMultiGenerator.cxx, a file that is not compiled during bootstrap. Backport the upstream fix, which moves the include behind the existing CMAKE_BOOTSTRAP guard. It is in no 3.30.x release (that branch is EOL); upstream shipped it first in 3.31.10 / 4.0.5 / 4.1.2. Assisted-by: Claude:claude-opus-4-8 Link: https://github.com/openwrt/openwrt/pull/24303 Signed-off-by: Hauke Mehrtens --- tools/cmake/Makefile | 2 +- ...mpilation-with-gcc-16-devirtualizati.patch | 31 +++++++++++++++++++ .../patches/160-disable_xcode_generator.patch | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 tools/cmake/patches/010-bootstrap-Fix-compilation-with-gcc-16-devirtualizati.patch diff --git a/tools/cmake/Makefile b/tools/cmake/Makefile index 152d295cb3d..7e48732e7ac 100644 --- a/tools/cmake/Makefile +++ b/tools/cmake/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=cmake PKG_VERSION:=3.30.5 PKG_VERSION_MAJOR:=$(word 1,$(subst ., ,$(PKG_VERSION))).$(word 2,$(subst ., ,$(PKG_VERSION))) -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_CPE_ID:=cpe:/a:kitware:cmake PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz diff --git a/tools/cmake/patches/010-bootstrap-Fix-compilation-with-gcc-16-devirtualizati.patch b/tools/cmake/patches/010-bootstrap-Fix-compilation-with-gcc-16-devirtualizati.patch new file mode 100644 index 00000000000..b8d5c6f32ab --- /dev/null +++ b/tools/cmake/patches/010-bootstrap-Fix-compilation-with-gcc-16-devirtualizati.patch @@ -0,0 +1,31 @@ +From ea04e19daf7010781d0df980b9683a642093e381 Mon Sep 17 00:00:00 2001 +From: Brad King +Date: Wed, 24 Sep 2025 12:02:37 -0400 +Subject: bootstrap: Fix compilation with gcc 16 devirtualization + +Avoid including a header for a subclass whose implementation is not +compiled during bootstrap. + +Fixes: #27256 +--- + Source/cmake.cxx | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/Source/cmake.cxx ++++ b/Source/cmake.cxx +@@ -126,12 +126,12 @@ + # include "cmExtraEclipseCDT4Generator.h" + # include "cmExtraKateGenerator.h" + # include "cmExtraSublimeTextGenerator.h" +-#endif + + // NOTE: the __linux__ macro is predefined on Android host too, but + // main CMakeLists.txt filters out this generator by host name. +-#if (defined(__linux__) && !defined(__ANDROID__)) || defined(_WIN32) +-# include "cmGlobalGhsMultiGenerator.h" ++# if (defined(__linux__) && !defined(__ANDROID__)) || defined(_WIN32) ++# include "cmGlobalGhsMultiGenerator.h" ++# endif + #endif + + #if defined(__APPLE__) diff --git a/tools/cmake/patches/160-disable_xcode_generator.patch b/tools/cmake/patches/160-disable_xcode_generator.patch index 0e29dedd9b4..6dd927bf2f6 100644 --- a/tools/cmake/patches/160-disable_xcode_generator.patch +++ b/tools/cmake/patches/160-disable_xcode_generator.patch @@ -12,7 +12,7 @@ --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -134,7 +134,7 @@ - # include "cmGlobalGhsMultiGenerator.h" + # endif #endif -#if defined(__APPLE__)