diff --git a/meta/recipes-devtools/cmake/cmake.inc b/meta/recipes-devtools/cmake/cmake.inc index ab9f459c05..a52506a8ea 100644 --- a/meta/recipes-devtools/cmake/cmake.inc +++ b/meta/recipes-devtools/cmake/cmake.inc @@ -17,7 +17,8 @@ LIC_FILES_CHKSUM = "file://Copyright.txt;md5=9d3d12c5f3b4c1f83650adcc65b59c06 \ CMAKE_MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:2])}" SRC_URI = "https://cmake.org/files/v${CMAKE_MAJOR_VERSION}/cmake-${PV}.tar.gz \ -" + file://0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch \ + " SRC_URI[sha256sum] = "72b7570e5c8593de6ac4ab433b73eab18c5fb328880460c86ce32608141ad5c1" diff --git a/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch b/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch new file mode 100644 index 0000000000..7ffcc95ac3 --- /dev/null +++ b/meta/recipes-devtools/cmake/cmake/0001-CMakeDetermineCompilerABI-Strip-pipe-from-compile-fl.patch @@ -0,0 +1,52 @@ +From bd94bbdc35a9da4c73d538e0cc55bc95944f620d Mon Sep 17 00:00:00 2001 +From: Philip Lorenz +Date: Mon, 3 Jun 2024 13:19:24 +0200 +Subject: [PATCH] CMakeDetermineCompilerABI: Strip -pipe from compile flags + +When `-pipe` is enabled, GCC passes data between its different +executables using pipes instead of temporary files. This leads to issues +when cmake attempts to infer compiler internals via the `-v` parameter +as each executable will print to `stderr` in parallel. + +For example we have observed the following outputs in our builds which +sporadically lead to build failures as system include directories were +not detected reliably: + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [.../usr/bin/x86_64-poky-linux/../../lib/x86_64-poky-linux/gcc/x86_64-poky-linux/11.4.0/include] + add: [.../usr/bin/x86_64-poky-linux/../../lib/x86_64-poky-linux/gcc/x86_64-poky-linux/11.4.0/include-fixed] + add: [.../usr/include/c++/11.4.0] + add: [.../usr/include/c++/11.4.0/x86_64-poky-linux] + add: [.../usr/include/c++/11.4.0/backward] + add: [.../usr/lib/x86_64-poky-linux/11.4.0/include] + add: [...GNU assembler version 2.38 (x86_64-poky-linux) using BFD version (GNU Binutils) 2.38.20220708] + add: [/usr/include] + end of search list found + +Fix this issue by stripping the `-pipe` parameter from the compilation +flag when determining the toolchain configuration. + +Upstream-Status: Backport [3.32.0, 71be059f3f32b6791427893a48ba4815a19e2e78] +Signed-off-by: Philip Lorenz +--- + Modules/CMakeDetermineCompilerABI.cmake | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake +index efc18f93c2..f2e40479b1 100644 +--- a/Modules/CMakeDetermineCompilerABI.cmake ++++ b/Modules/CMakeDetermineCompilerABI.cmake +@@ -43,6 +43,11 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src) + + # Avoid failing ABI detection on warnings. + string(REGEX REPLACE "(^| )-Werror([= ][^-][^ ]*)?( |$)" " " CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}") ++ # Avoid passing of "-pipe" when determining the compiler internals. With ++ # "-pipe" GCC will use pipes to pass data between the involved ++ # executables. This may lead to issues when their stderr output (which ++ # contains the relevant compiler internals) becomes interweaved. ++ string(REGEX REPLACE "(^| )-pipe( |$)" " " CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}") + + # Save the current LC_ALL, LC_MESSAGES, and LANG environment variables + # and set them to "C" that way GCC's "search starts here" text is in