summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2020-12-31 15:49:29 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-01-01 23:14:52 +0000
commit15a21998ef8898e11481e77535550fa7ddfd4705 (patch)
tree45e60f0decbba59b8ed7eb9f91474b68dde3d9b2 /meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch
parent488c554623839d17436333894f9f4b244347de9d (diff)
downloadopenembedded-core-contrib-15a21998ef8898e11481e77535550fa7ddfd4705.tar.gz
ccache: Build fixes for clang and riscv32
Backport patch to improve AVX detection helps build with clang Add proposed patch to fix build with 32bit architectures using 64bit time_t Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch')
-rw-r--r--meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch121
1 files changed, 121 insertions, 0 deletions
diff --git a/meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch b/meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch
new file mode 100644
index 0000000000..12d4ebc4bc
--- /dev/null
+++ b/meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch
@@ -0,0 +1,121 @@
+From 05d290165a3b61da09b715e6c8e62cebebab57cc Mon Sep 17 00:00:00 2001
+From: Erik Flodin <erik@ejohansson.se>
+Date: Mon, 7 Dec 2020 19:20:31 +0100
+Subject: [PATCH 1/2] Improve SIMD detection (#735)
+
+* Try to compile code to detect SSE/AVX support. Just checking if the compiler
+ supports the flag isn't enough as e.g. Clang on Apple's new ARM silicon seems
+ to accept the flag but then fails when building.
+* Try to detect and enable BLAKE3's Neon support.
+* Improve detection of AVX2 target attribute support and remove the explicit
+ compiler version check that hopefully shouldn't be needed.
+
+Fixes #734.
+Upstream-Status: Backport [https://github.com/ccache/ccache/commit/b438f50388dd00285083260f60450e6237b7d58f]
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+---
+ cmake/GenerateConfigurationFile.cmake | 25 +++++++++---------
+ src/third_party/blake3/CMakeLists.txt | 38 ++++++++++++++++++++-------
+ 2 files changed, 42 insertions(+), 21 deletions(-)
+
+diff --git a/cmake/GenerateConfigurationFile.cmake b/cmake/GenerateConfigurationFile.cmake
+index a21861f4..836ff9bb 100644
+--- a/cmake/GenerateConfigurationFile.cmake
++++ b/cmake/GenerateConfigurationFile.cmake
+@@ -67,18 +67,19 @@ check_struct_has_member("struct stat" st_mtim sys/stat.h
+ check_struct_has_member("struct statfs" f_fstypename sys/mount.h
+ HAVE_STRUCT_STATFS_F_FSTYPENAME)
+
+-include(CheckCXXCompilerFlag)
+-
+-# Old GCC versions don't have the required header support.
+-# Old Apple Clang versions seem to support -mavx2 but not the target
+-# attribute that's used to enable AVX2 for a certain function.
+-if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
+- OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0))
+- message(STATUS "Detected unsupported compiler for HAVE_AVX2 - disabled")
+- set(HAVE_AVX2 FALSE)
+-else()
+- check_cxx_compiler_flag(-mavx2 HAVE_AVX2)
+-endif()
++include(CheckCXXSourceCompiles)
++check_cxx_source_compiles(
++ [=[
++ #include <immintrin.h>
++ void func() __attribute__((target("avx2")));
++ void func() { _mm256_abs_epi8(_mm256_set1_epi32(42)); }
++ int main()
++ {
++ func();
++ return 0;
++ }
++ ]=]
++ HAVE_AVX2)
+
+ list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32)
+ list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ws2_32)
+diff --git a/src/third_party/blake3/CMakeLists.txt b/src/third_party/blake3/CMakeLists.txt
+index a75e5611..cc24253c 100644
+--- a/src/third_party/blake3/CMakeLists.txt
++++ b/src/third_party/blake3/CMakeLists.txt
+@@ -13,9 +13,9 @@ else()
+ endif()
+
+ include(CheckAsmCompilerFlag)
+-include(CheckCCompilerFlag)
++include(CheckCSourceCompiles)
+
+-function(add_source_if_enabled feature compile_flags)
++function(add_source_if_enabled feature compile_flags intrinsic)
+ string(TOUPPER "have_${blake_source_type}_${feature}" have_feature)
+
+ # AVX512 support fails to compile with old Apple Clang versions even though
+@@ -28,7 +28,14 @@ function(add_source_if_enabled feature compile_flags)
+ elseif(${blake_source_type} STREQUAL "asm")
+ check_asm_compiler_flag(${compile_flags} ${have_feature})
+ else()
+- check_c_compiler_flag(${compile_flags} ${have_feature})
++ set(CMAKE_REQUIRED_FLAGS ${compile_flags})
++ check_c_source_compiles(
++ [=[
++ #include <immintrin.h>
++ int main() { ${intrinsic}; return 0; }
++ ]=]
++ ${have_feature})
++ unset(CMAKE_REQUIRED_FLAGS)
+ endif()
+
+ if(${have_feature})
+@@ -42,10 +49,23 @@ function(add_source_if_enabled feature compile_flags)
+ endif()
+ endfunction()
+
+-add_source_if_enabled(sse2 "-msse2")
+-add_source_if_enabled(sse41 "-msse4.1")
+-add_source_if_enabled(avx2 "-mavx2")
+-add_source_if_enabled(avx512 "-mavx512f -mavx512vl")
++# https://software.intel.com/sites/landingpage/IntrinsicsGuide/
++add_source_if_enabled(sse2 "-msse2" "_mm_set1_epi32(42)")
++add_source_if_enabled(sse41 "-msse4.1" "_mm_test_all_ones(_mm_set1_epi32(42))")
++add_source_if_enabled(avx2 "-mavx2" "_mm256_abs_epi8(_mm256_set1_epi32(42))")
++add_source_if_enabled(avx512 "-mavx512f -mavx512vl" "_mm256_abs_epi64(_mm256_set1_epi32(42))")
+
+-# TODO: how to detect ARM NEON support?
+-# If NEON, define BLAKE3_USE_NEON and build blake3_neon.c
++# Neon is always available on AArch64
++if(CMAKE_SIZEOF_VOID_P EQUAL 8)
++ # https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics
++ check_c_source_compiles(
++ [=[
++ #include <arm_neon.h>
++ int main() { vdupq_n_s32(42); return 0; }
++ ]=]
++ HAVE_NEON)
++ if(HAVE_NEON)
++ target_sources(blake3 PRIVATE blake3_neon.c)
++ target_compile_definitions(blake3 PRIVATE BLAKE3_USE_NEON)
++ endif()
++endif()
+--
+2.30.0
+