summaryrefslogtreecommitdiffstats
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:15:13 +0000
commit0e80f238796ccbdea69142d1a421c306caa0f931 (patch)
treeffd7466290d1bd96dadcb6d101af0ca658b0cb8f
parentd287745d1209aa989d83a371db26317fa56f1445 (diff)
downloadpoky-0e80f238796ccbdea69142d1a421c306caa0f931.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 (From OE-Core rev: 15a21998ef8898e11481e77535550fa7ddfd4705) Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/ccache/ccache/0001-Improve-SIMD-detection-735.patch121
-rw-r--r--meta/recipes-devtools/ccache/ccache/0002-Always-use-64bit-to-print-time_t.patch33
-rw-r--r--meta/recipes-devtools/ccache/ccache_4.1.bb6
3 files changed, 158 insertions, 2 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 @@
1From 05d290165a3b61da09b715e6c8e62cebebab57cc Mon Sep 17 00:00:00 2001
2From: Erik Flodin <erik@ejohansson.se>
3Date: Mon, 7 Dec 2020 19:20:31 +0100
4Subject: [PATCH 1/2] Improve SIMD detection (#735)
5
6* Try to compile code to detect SSE/AVX support. Just checking if the compiler
7 supports the flag isn't enough as e.g. Clang on Apple's new ARM silicon seems
8 to accept the flag but then fails when building.
9* Try to detect and enable BLAKE3's Neon support.
10* Improve detection of AVX2 target attribute support and remove the explicit
11 compiler version check that hopefully shouldn't be needed.
12
13Fixes #734.
14Upstream-Status: Backport [https://github.com/ccache/ccache/commit/b438f50388dd00285083260f60450e6237b7d58f]
15Signed-off-by: Khem Raj <raj.khem@gmail.com>
16---
17 cmake/GenerateConfigurationFile.cmake | 25 +++++++++---------
18 src/third_party/blake3/CMakeLists.txt | 38 ++++++++++++++++++++-------
19 2 files changed, 42 insertions(+), 21 deletions(-)
20
21diff --git a/cmake/GenerateConfigurationFile.cmake b/cmake/GenerateConfigurationFile.cmake
22index a21861f4..836ff9bb 100644
23--- a/cmake/GenerateConfigurationFile.cmake
24+++ b/cmake/GenerateConfigurationFile.cmake
25@@ -67,18 +67,19 @@ check_struct_has_member("struct stat" st_mtim sys/stat.h
26 check_struct_has_member("struct statfs" f_fstypename sys/mount.h
27 HAVE_STRUCT_STATFS_F_FSTYPENAME)
28
29-include(CheckCXXCompilerFlag)
30-
31-# Old GCC versions don't have the required header support.
32-# Old Apple Clang versions seem to support -mavx2 but not the target
33-# attribute that's used to enable AVX2 for a certain function.
34-if((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.0)
35- OR (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 8.0))
36- message(STATUS "Detected unsupported compiler for HAVE_AVX2 - disabled")
37- set(HAVE_AVX2 FALSE)
38-else()
39- check_cxx_compiler_flag(-mavx2 HAVE_AVX2)
40-endif()
41+include(CheckCXXSourceCompiles)
42+check_cxx_source_compiles(
43+ [=[
44+ #include <immintrin.h>
45+ void func() __attribute__((target("avx2")));
46+ void func() { _mm256_abs_epi8(_mm256_set1_epi32(42)); }
47+ int main()
48+ {
49+ func();
50+ return 0;
51+ }
52+ ]=]
53+ HAVE_AVX2)
54
55 list(APPEND CMAKE_REQUIRED_LIBRARIES ws2_32)
56 list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES ws2_32)
57diff --git a/src/third_party/blake3/CMakeLists.txt b/src/third_party/blake3/CMakeLists.txt
58index a75e5611..cc24253c 100644
59--- a/src/third_party/blake3/CMakeLists.txt
60+++ b/src/third_party/blake3/CMakeLists.txt
61@@ -13,9 +13,9 @@ else()
62 endif()
63
64 include(CheckAsmCompilerFlag)
65-include(CheckCCompilerFlag)
66+include(CheckCSourceCompiles)
67
68-function(add_source_if_enabled feature compile_flags)
69+function(add_source_if_enabled feature compile_flags intrinsic)
70 string(TOUPPER "have_${blake_source_type}_${feature}" have_feature)
71
72 # AVX512 support fails to compile with old Apple Clang versions even though
73@@ -28,7 +28,14 @@ function(add_source_if_enabled feature compile_flags)
74 elseif(${blake_source_type} STREQUAL "asm")
75 check_asm_compiler_flag(${compile_flags} ${have_feature})
76 else()
77- check_c_compiler_flag(${compile_flags} ${have_feature})
78+ set(CMAKE_REQUIRED_FLAGS ${compile_flags})
79+ check_c_source_compiles(
80+ [=[
81+ #include <immintrin.h>
82+ int main() { ${intrinsic}; return 0; }
83+ ]=]
84+ ${have_feature})
85+ unset(CMAKE_REQUIRED_FLAGS)
86 endif()
87
88 if(${have_feature})
89@@ -42,10 +49,23 @@ function(add_source_if_enabled feature compile_flags)
90 endif()
91 endfunction()
92
93-add_source_if_enabled(sse2 "-msse2")
94-add_source_if_enabled(sse41 "-msse4.1")
95-add_source_if_enabled(avx2 "-mavx2")
96-add_source_if_enabled(avx512 "-mavx512f -mavx512vl")
97+# https://software.intel.com/sites/landingpage/IntrinsicsGuide/
98+add_source_if_enabled(sse2 "-msse2" "_mm_set1_epi32(42)")
99+add_source_if_enabled(sse41 "-msse4.1" "_mm_test_all_ones(_mm_set1_epi32(42))")
100+add_source_if_enabled(avx2 "-mavx2" "_mm256_abs_epi8(_mm256_set1_epi32(42))")
101+add_source_if_enabled(avx512 "-mavx512f -mavx512vl" "_mm256_abs_epi64(_mm256_set1_epi32(42))")
102
103-# TODO: how to detect ARM NEON support?
104-# If NEON, define BLAKE3_USE_NEON and build blake3_neon.c
105+# Neon is always available on AArch64
106+if(CMAKE_SIZEOF_VOID_P EQUAL 8)
107+ # https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics
108+ check_c_source_compiles(
109+ [=[
110+ #include <arm_neon.h>
111+ int main() { vdupq_n_s32(42); return 0; }
112+ ]=]
113+ HAVE_NEON)
114+ if(HAVE_NEON)
115+ target_sources(blake3 PRIVATE blake3_neon.c)
116+ target_compile_definitions(blake3 PRIVATE BLAKE3_USE_NEON)
117+ endif()
118+endif()
119--
1202.30.0
121
diff --git a/meta/recipes-devtools/ccache/ccache/0002-Always-use-64bit-to-print-time_t.patch b/meta/recipes-devtools/ccache/ccache/0002-Always-use-64bit-to-print-time_t.patch
new file mode 100644
index 0000000000..85ce2b762d
--- /dev/null
+++ b/meta/recipes-devtools/ccache/ccache/0002-Always-use-64bit-to-print-time_t.patch
@@ -0,0 +1,33 @@
1From fa360ca8a457dafcae1d22df2b342d3ee291e8af Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Thu, 31 Dec 2020 14:28:39 -0800
4Subject: [PATCH 2/2] Always use 64bit to print time_t
5
6some 32bit architectures e.g. RISCV32 use 64bit time_t from beginning
7which does not fit into long int size on LP32 systems
8
9Upstream-Status: Submitted [https://github.com/ccache/ccache/pull/762]
10Signed-off-by: Khem Raj <raj.khem@gmail.com>
11---
12 src/Logging.cpp | 5 ++++-
13 1 file changed, 4 insertions(+), 1 deletion(-)
14
15diff --git a/src/Logging.cpp b/src/Logging.cpp
16index 9a5d99b7..1a6e6264 100644
17--- a/src/Logging.cpp
18+++ b/src/Logging.cpp
19@@ -88,7 +88,10 @@ do_log(string_view message, bool bulk)
20 if (tm) {
21 strftime(timestamp, sizeof(timestamp), "%Y-%m-%dT%H:%M:%S", &*tm);
22 } else {
23- snprintf(timestamp, sizeof(timestamp), "%lu", tv.tv_sec);
24+ snprintf(timestamp,
25+ sizeof(timestamp),
26+ "%llu",
27+ (long long unsigned int)tv.tv_sec);
28 }
29 snprintf(prefix,
30 sizeof(prefix),
31--
322.30.0
33
diff --git a/meta/recipes-devtools/ccache/ccache_4.1.bb b/meta/recipes-devtools/ccache/ccache_4.1.bb
index 5f7d93b485..96254a3875 100644
--- a/meta/recipes-devtools/ccache/ccache_4.1.bb
+++ b/meta/recipes-devtools/ccache/ccache_4.1.bb
@@ -11,7 +11,10 @@ LIC_FILES_CHKSUM = "file://LICENSE.adoc;md5=a66c581f855c1c408730fe5d171e3013"
11 11
12DEPENDS = "zstd" 12DEPENDS = "zstd"
13 13
14SRC_URI = "https://github.com/ccache/ccache/releases/download/v${PV}/${BP}.tar.gz" 14SRC_URI = "https://github.com/ccache/ccache/releases/download/v${PV}/${BP}.tar.gz \
15 file://0001-Improve-SIMD-detection-735.patch \
16 file://0002-Always-use-64bit-to-print-time_t.patch \
17 "
15SRC_URI[sha256sum] = "cdeefb827b3eef3b42b5454858123881a4a90abbd46cc72cf8c20b3bd039deb7" 18SRC_URI[sha256sum] = "cdeefb827b3eef3b42b5454858123881a4a90abbd46cc72cf8c20b3bd039deb7"
16 19
17UPSTREAM_CHECK_URI = "https://github.com/ccache/ccache/releases/" 20UPSTREAM_CHECK_URI = "https://github.com/ccache/ccache/releases/"
@@ -21,4 +24,3 @@ inherit cmake
21PATCHTOOL = "patch" 24PATCHTOOL = "patch"
22 25
23BBCLASSEXTEND = "native" 26BBCLASSEXTEND = "native"
24