mirror of
https://git.yoctoproject.org/poky
synced 2026-05-08 17:19:20 +00:00
cmake: Fix sporadic issues when determining compiler internals
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.
In turn this may lead to compilation issues down the line as for example
the system include directories could not be determined properly which
may then propagate to issues such as:
recipe-sysroot/usr/include/c++/11.3.0/cstdlib:75:15: fatal error:
stdlib.h: No such file or directory
| 75 | #include_next <stdlib.h>
| | ^~~~~~~~~~
| compilation terminated.
| ninja: build stopped: subcommand failed.
| WARNING: exit code 1 from a shell command.
Fix this stripping `-pipe` from the command line used to determine
compiler internals.
(From OE-Core rev: 34fa8230163e5ed1c6668bf800c45a173c6490ca)
Signed-off-by: Philip Lorenz <philip.lorenz@bmw.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
b94b85bef0
commit
ed82f9c090
@@ -17,7 +17,8 @@ LIC_FILES_CHKSUM = "file://Copyright.txt;md5=718f05155941b33862726348d3cd46ce \
|
||||
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] = "9f55e1a40508f2f29b7e065fa08c29f82c402fa0402da839fffe64a25755a86d"
|
||||
|
||||
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
From 7fa115171a658d5358e15dcb40b233d049acae2f Mon Sep 17 00:00:00 2001
|
||||
From: Philip Lorenz <philip.lorenz@bmw.de>
|
||||
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 <philip.lorenz@bmw.de>
|
||||
---
|
||||
Modules/CMakeDetermineCompilerABI.cmake | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Modules/CMakeDetermineCompilerABI.cmake b/Modules/CMakeDetermineCompilerABI.cmake
|
||||
index 4a75e25a92..806f0b715d 100644
|
||||
--- a/Modules/CMakeDetermineCompilerABI.cmake
|
||||
+++ b/Modules/CMakeDetermineCompilerABI.cmake
|
||||
@@ -52,14 +52,21 @@ function(CMAKE_DETERMINE_COMPILER_ABI lang src)
|
||||
|
||||
__TestCompiler_setTryCompileTargetType()
|
||||
|
||||
- # Avoid failing ABI detection on warnings.
|
||||
+ # Avoid failing ABI detection caused by non-functionally relevant
|
||||
+ # compiler arguments
|
||||
if(CMAKE_TRY_COMPILE_CONFIGURATION)
|
||||
string(TOUPPER "${CMAKE_TRY_COMPILE_CONFIGURATION}" _tc_config)
|
||||
else()
|
||||
set(_tc_config "DEBUG")
|
||||
endif()
|
||||
foreach(v CMAKE_${lang}_FLAGS CMAKE_${lang}_FLAGS_${_tc_config})
|
||||
+ # Avoid failing ABI detection on warnings.
|
||||
string(REGEX REPLACE "(^| )-Werror([= ][^-][^ ]*)?( |$)" " " ${v} "${${v}}")
|
||||
+ # 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( |$)" " " ${v} "${${v}}")
|
||||
endforeach()
|
||||
|
||||
# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables
|
||||
Reference in New Issue
Block a user