From: Khem Raj Date: Sat, 10 May 2025 22:05:43 +0000 (-0700) Subject: compiler-rt: Exclude sync builtins from build when arm < v6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e1b143860b221600f7dab5c08e5b187aefb851dd;p=thirdparty%2Fopenembedded%2Fopenembedded-core-contrib.git compiler-rt: Exclude sync builtins from build when arm < v6 arm architecture < v6 does not have the dmb support, therefore do not add the sync primitives to compiler-rt builtins build Signed-off-by: Khem Raj Signed-off-by: Mathieu Dubois-Briand Signed-off-by: Richard Purdie --- diff --git a/meta/recipes-devtools/clang/clang/0038-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch b/meta/recipes-devtools/clang/clang/0038-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch new file mode 100644 index 0000000000..4639a73fe6 --- /dev/null +++ b/meta/recipes-devtools/clang/clang/0038-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch @@ -0,0 +1,61 @@ +From 5a0daa2dcc2bb39d87c4fcae7036cd8ab7ee6f6d Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 10 May 2025 14:03:12 -0700 +Subject: [PATCH] compiler-rt: Exclude sync_fetch_and_* for any pre-ARMv6 targets + +Sometimes builds may happen where ABI is not indidated by host_triple +e.g. on Yocto the compiler used is called arm-poky-linux-gnueabi-clang +for all arm32 cross compilers, it passed the ABI flags on cmdline in +addition. e.g. + +-march=armv5te -mfloat-abi=soft +or +-march=armv7-a -mfloat-abi=hard + +compiler-rt's makery tries to add arm to COMPILER_RT_SUPPORTED_ARCH +deducing it from triple name. + +which ends up choosing `arm` as one of compiler-rt arch to build for. +This arch is however using armv7+ defaults and then tried to build sync +builtins using + +arm-poky-linux-gnueabi-clang -march=armv5te -mfloat-abi=soft ... + +Which does not compile correctly, in such cases it should simply +remove the sync builtins from list of things to build similar to what +is done when we use armv4t or armv5t + +set(armv4t_SOURCES ${arm_min_SOURCES}) +set(armv5te_SOURCES ${arm_min_SOURCES}) + +This lets compiler-rt build for arm architectures without depending +upong compiler triple, but instead of poking the compiler for what +it is building for + +Upstream-Status: Submitted [https://github.com/llvm/llvm-project/pull/139411] +Signed-off-by: Khem Raj +--- + compiler-rt/lib/builtins/CMakeLists.txt | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +--- a/compiler-rt/lib/builtins/CMakeLists.txt ++++ b/compiler-rt/lib/builtins/CMakeLists.txt +@@ -864,6 +864,18 @@ else () + list(JOIN BUILTIN_CFLAGS " " CMAKE_REQUIRED_FLAGS) + set(CMAKE_REQUIRED_FLAGS "${TARGET_${arch}_CFLAGS} ${BUILTIN_CFLAGS_${arch}}") + message(STATUS "Performing additional configure checks with target flags: ${CMAKE_REQUIRED_FLAGS}") ++ # For ARM archs, exclude any sync builtins if dmb or mcr p15, #0, r0, c7, c10, #5 ++ # is not supported ++ if (${arch} MATCHES "^(arm|armhf)$") ++ try_compile_only(COMPILER_RT_HAS_${arch}_SYNC ++ SOURCE "#if __ARM_ARCH < 6 ++ #error DMB is only supported on ARMv6+ ! ++ #endif ++ int main(void) { return 0; }") ++ if(NOT COMPILER_RT_HAS_${arch}_SYNC) ++ list(REMOVE_ITEM ${arch}_SOURCES ${arm_sync_SOURCES}) ++ endif() ++ endif() + # For ARM archs, exclude any VFP builtins if VFP is not supported + if (${arch} MATCHES "^(arm|armhf|armv7|armv7s|armv7k|armv7m|armv7em|armv8m.main|armv8.1m.main)$") + string(REPLACE ";" " " _TARGET_${arch}_CFLAGS "${TARGET_${arch}_CFLAGS}") diff --git a/meta/recipes-devtools/clang/common.inc b/meta/recipes-devtools/clang/common.inc index 07315f17e4..f661a6283e 100644 --- a/meta/recipes-devtools/clang/common.inc +++ b/meta/recipes-devtools/clang/common.inc @@ -57,6 +57,7 @@ SRC_URI = "\ file://0034-AsmMatcherEmitter-sort-ClassInfo-lists-by-name-as-we.patch \ file://0035-llvm-config-remove-LLVM_LDFLAGS-from-ldflags-output.patch \ file://0036-openmp-Do-not-emit-date-and-time-into-generate-files.patch \ + file://0038-compiler-rt-Exclude-sync_fetch_and_-for-any-pre-ARMv.patch \ " # Fallback to no-PIE if not set GCCPIE ??= ""